package org.focusj.scala.fn

import scala.Function1

object Fn1 {
    // how to define a function in scala
    // 中规中矩的写法
    // =是让scala来推演类型
    // 不使用=的函数的返回类型是Unit
    // 不适用{}包围也是可以的。但是注意不是用的情况。函数fn4去掉{}是不行滴
    def fn1(a: Int, b: Int, c: Int): Int = {
        return (a + b + c)
    }

    //自动将(a+b+c)当做返回值
    def fn2(a: Int, b: Int, c: Int) = a + b + c

    //如果函数没有参数，也可以将括号去掉
    //但是在调用的时候是有区别的：声明的时候带有括号的可以fn或者fn()调用，声明时不带括号的只能不加括号调用。
    def fn3 = println("fn")

    def fn4 = {
        var array = Array(1, 2, 3)
        4 +: array
    }

    //变长参数
    def sum(n: Int*) = n.sum

    def main(args: Array[String]) {
        println(sum(1, 2, 3, 4, 5, 6, 7, 8, 9, 0))
        println(sum(0 to 9: _*)) //变长参数的调用方式，一定要有:_*否则是不行的
    }
}